package io;

import java.io.*;

/**
 * 对象流
 *对象流是一对高级流,在流连接中的作用是进行队列的序列化与反序列化.方便我们进行对象的读写
 * 操作.
 * 对象序列化:将一个对象按照其结构转换为一组字节的过程
 * 反序列化:将一组字节还原为java对象的过程
 *
 * java.io.ObjectInputStream和ObjectOutputStream
 */
public class OOSDemo {
    public static void main(String[] args) throws IOException {
        /*
            将一个Person对象写入文件person.obj中
         */
        String name="苍老师";
        int age=18;
        String gender="女";
        String[]  otherInfo={"From J.P.,an actor"};
        Person p=new Person(name,age,gender,otherInfo);
        System.out.println(p);

        FileOutputStream fos=new FileOutputStream("person.obj");
        ObjectOutputStream oos=new ObjectOutputStream(fos);
        /*
        当使用对象输出流将一个对象写出(进行对象序列化)是,该方法要求写出的对象
        所属的类必须实现接口:java.io.Serializable,否则会抛出下面的异常,
        java.io.NotSerializableException:io.Person

        写入文件后,发现文件数据比Person对象保存的数据要大,这是因为序列化后的这组字节
        中还要包含当前对象的结构信息,比如类名,属性信息等等,以便将来可以进行反序列化.
         */
        oos.writeObject(p);
        System.out.println("写出完毕");
        oos.close();

    }

}
